<?php
/**
 * 关联模型初探
 */

namespace app\controller;


use app\model\Profile;
use app\model\role;
use app\model\User;
use app\model\Book;

class Grade
{
    public function index(){
        $user = User::find(19);
        return json($user->profile);
    }

    public function belong(){
        $user = Profile::find(1);
        return json($user->user);
    }

    //关联修改
    public function update(){
        $user = User::find(19);
        $user->profile->save(['hobby'=>'酷爱大姐姐']);
    }

    //关联新增
    public function insert(){
        $user = User::find(19);
        $user->profile()->save(['hobby'=>'爱大姐姐']);
    }

    //hasWhere   即用hasOne()也能模拟belongTo()进行查询
    public function hasW(){
        //hasWhere()参数一表示是User模型类的profile方法，而非Profile模型类
//        $user = User::hasWhere('profile',['id'=>1])->find();
        $user = User::hasWhere('profile',function($query){
            $query->where('profile.id',8);
        })->find();
        return json($user);
    }


    //关联一对多查询
    public function selectMany(){
        $user = User::find(19);
//        return json($user->book);
        //使用book()方法模式，可以进一步进行数据的筛选
//        return json($user->book()->where('id','>',5)->select());

        //使用has()方法 查询关联附表的主表内容，比如大于等于2条的主表记录
        return json(User::has('book','>=',2)->select());
        //使用hasWhere()方法 查询关联附表筛选够记录
    }

    //关联一对多 添加
    public function saveMany(){
        $user = User::find(20);
//        $user->book()->save(['title'=>'《数据结构与算法》']);
        $user->book()->saveAll(
            [
                ['title'=>'《计算机组成原理》'],
                ['title'=>'《计算机网络原理》']
            ]
        );
    }

    //关联删除
    public function delete(){
        //使用together()方法，可以删除主表内容时，将附表关联内容全部删除
        $user = User::with('book')->find(303);
        $user->together(['book'])->delete();
    }


    //关联多对多
    public function many(){
//        $user = User::find(19);
//        //获取用户所有权限角色
//        $roles = $user->roles;
//        return json($roles);

//        $user = User::find(19);
//        $user->roles()->save(['type'=>'测试管理员']);

        $user = User::find(19);
//        $user->roles()->save(5);
//        $user->roles()->save(Role::find(5));
//        $user->roles()->saveAll([1,2,3]);

//        $user->roles()->attach(2,['details'=>'测试详情']);

    //删除
        $user->roles()->detach(Role::find(5));
    }

}